; library math include file
;
;**************************************************************************************
;* COCO3()
;**************************************************************************************
FUNCTION	COCO3	
REM	;COCO3()  returns value of 1 to b register
REM	;
COCO3	LDD	$FFFE	;check if coco3
	ADDD	$FFFF
	CMPA	#167
	BEQ	SETUPCC3
	CLRB
	RTS
SETUPCC3	LDB	#1
	RTS
ENDFUNCTION
;
; **********************************************************************************************************************
; * create sin_cos table
; **********************************************************************************************************************
FUNCTION	MAKESINCOS	
REM	; makesincos() creates and returns sine table to x register and cosine to y register
REM	; This table is needed for rotational graphics such as circle
#NOMOVE
SINTBL	FCB	128,131,134,137,140,143,146,149,152,155,158,162,165,167,170,173	; 16
	FCB	176,179,182,185,188,190,193,196,198,201,203,206,208,211,213,215	; 32
	FCB	218,220,222,224,226,228,230,232,233,235,237,238,240,241,243,244	; 48
	FCB	245,246,247,248,249,250,251,252,252,253,253,254,254,254,254,255	; 64
COSTBL	FCB	255,254,254,254,254,253,253,252,252,251,250,250,249,248,247,246	; 80
	FCB	244,243,242,240,239,237,236,234,232,231,229,227,225,223,221,219	; 96
	FCB	216,214,212,210,207,205,202,200,197,194,192,189,186,183,181,178	; 112
	FCB	175,172,169,166,163,160,157,154,151,148,145,142,138,135,132,129	; 128
	FCB	126,124,121,118,114,111,108,105,102,99,96,93,90,87,84,81	; 144
	FCB	78,75,73,70,67,64,62,59,56,54,51,49,46,44,42,40	; 160
	FCB	37,35,33,31,29,27,25,24,22,20,19,17,16,14,13,12	; 176
	FCB	10,9,8,7,6,5,4,3,3,2,2,1,1,1,1,0	; 192
	FCB	0,1,1,1,1,2,2,3,4,5,6,7,8,9,10,11	; 208
	FCB	12,13,15,16,18,19,21,23,24,26,28,30,32,34,36,38	; 224
	FCB	41,43,45,48,50,53,55,58,60,63,66,68,71,74,77,80	; 240
	FCB	83,86,89,91,94,98,101,104,107,110,113,116,119,122,125,128	; 256
	FCB	128,131,134,137,140,143,146,149,152,155,158,162,165,167,170,173	; 16
	FCB	176,179,182,185,188,190,193,196,198,201,203,206,208,211,213,215	; 32
	FCB	218,220,222,224,226,228,230,232,233,235,237,238,240,241,243,244	; 48
	FCB	245,246,247,248,249,250,251,252,252,253,253,254,254,254,254,255	; 64
	FCB	255,254,254,254,254,253,253,252,252,251,250,250,249,248,247,246	; 80
	FCB	244,243,242,240,239,237,236,234,232,231,229,227,225,223,221,219	; 96
	FCB	216,214,212,210,207,205,202,200,197,194,192,189,186,183,181,178	; 112
	FCB	175,172,169,166,163,160,157,154,151,148,145,142,138,135,132,129	; 128
	FCB	126,124,121,118,114,111,108,105,102,99,96,93,90,87,84,81	; 144
	FCB	78,75,73,70,67,64,62,59,56,54,51,49,46,44,42,40	; 160
	FCB	37,35,33,31,29,27,25,24,22,20,19,17,16,14,13,12	; 176
	FCB	10,9,8,7,6,5,4,3,3,2,2,1,1,1,1,0	; 192
	FCB	0,1,1,1,1,2,2,3,4,5,6,7,8,9,10,11	; 208
	FCB	12,13,15,16,18,19,21,23,24,26,28,30,32,34,36,38	; 224
	FCB	41,43,45,48,50,53,55,58,60,63,66,68,71,74,77,80	; 240
	FCB	83,86,89,91,94,98,101,104,107,110,113,116,119,122,125,128	; 256
	FCB	128,131,134,137,140,143,146,149,152,155,158,162,165,167,170,173	; 16
	FCB	176,179,182,185,188,190,193,196,198,201,203,206,208,211,213,215	; 32
	FCB	218,220,222,224,226,228,230,232,233,235,237,238,240,241,243,244	; 48
	FCB	245,246,247,248,249,250,251,252,252,253,253,254,254,254,254,255	; 64
	FCB	255
#MOVE
MAKESINCOS	LDY	#COSTBL
	LDX	#SINTBL
	RTS
ENDFUNCTION
;
; **********************************************************************************************************************
; * create sin_cos table 3d perspective
; **********************************************************************************************************************
FUNCTION	MAKESINCOS3D	
REM	; makesincos3d() creates and returns sine table to x register and cosine to y register
REM	; This table is needed for rotational graphics such as circle
#NOMOVE
SINTBL	FCB	128,130,132,135,137,139,142,144,147,149,151,154,156,158,161,163	;16
	FCB	165,168,170,172,175,177,179,181,184,186,188,190,192,195,197,199	;32
	FCB	201,203,205,207,209,211,213,215,217,218,220,222,224,225,227,229	;48
	FCB	230,232,233,235,236,238,239,240,241,243,244,245,246,247,248,248	;64
	FCB	249,250,250,251,251,252,252,252,253,253,253,253,253,252,252,252	;80
	FCB	251,251,250,249,249,248,247,246,244,243,242,240,239,237,235,233	;96
	FCB	231,229,227,225,223,220,218,215,212,209,206,204,200,197,194,191	;112
	FCB	188,184,181,177,174,170,166,162,159,155,151,147,143,139,135,131	;128
	FCB	127,124,120,116,112,108,104,100,96,93,89,85,81,78,74,71	;144
	FCB	67,64,61,58,55,51,49,46,43,40,37,35,32,30,28,26	;160
	FCB	24,22,20,18,16,15,13,12,11,9,8,7,6,6,5,4	;176
	FCB	4,3,3,3,2,2,2,2,2,3,3,3,4,4,5,5	;192
	FCB	6,7,7,8,9,10,11,12,14,15,16,17,19,20,22,23	;208
	FCB	25,26,28,30,31,33,35,37,38,40,42,44,46,48,50,52	;224
	FCB	54,56,58,60,63,65,67,69,71,74,76,78,80,83,85,87	;240
	FCB	90,92,94,97,99,101,104,106,108,111,113,116,118,120,123,125	;256
	FCB	128,130,132,135,137,139,142,144,147,149,151,154,156,158,161,163	;16
	FCB	165,168,170,172,175,177,179,181,184,186,188,190,192,195,197,199	;32
	FCB	201,203,205,207,209,211,213,215,217,218,220,222,224,225,227,229	;48
	FCB	230,232,233,235,236,238,239,240,241,243,244,245,246,247,248,248	;64
	FCB	249,250,250,251,251,252,252,252,253,253,253,253,253,252,252,252	;80
	FCB	251,251,250,249,249,248,247,246,244,243,242,240,239,237,235,233	;96
	FCB	231,229,227,225,223,220,218,215,212,209,206,204,200,197,194,191	;112
	FCB	188,184,181,177,174,170,166,162,159,155,151,147,143,139,135,131	;128
	FCB	127,124,120,116,112,108,104,100,96,93,89,85,81,78,74,71	;144
	FCB	67,64,61,58,55,51,49,46,43,40,37,35,32,30,28,26	;160
	FCB	24,22,20,18,16,15,13,12,11,9,8,7,6,6,5,4	;176
	FCB	4,3,3,3,2,2,2,2,2,3,3,3,4,4,5,5	;192
	FCB	6,7,7,8,9,10,11,12,14,15,16,17,19,20,22,23	;208
	FCB	25,26,28,30,31,33,35,37,38,40,42,44,46,48,50,52	;224
	FCB	54,56,58,60,63,65,67,69,71,74,76,78,80,83,85,87	;240
	FCB	90,92,94,97,99,101,104,106,108,111,113,116,118,120,123,125	;256
	FCB	128,130,132,135,137,139,142,144,147,149,151,154,156,158,161,163	;16
	FCB	165,168,170,172,175,177,179,181,184,186,188,190,192,195,197,199	;32
	FCB	201,203,205,207,209,211,213,215,217,218,220,222,224,225,227,229	;48
	FCB	230,232,233,235,236,238,239,240,241,243,244,245,246,247,248,248	;64
	FCB	0
COSTBL	FCB	85,85,85,86,86,86,86,86,86,86,86,86,87,87,87,87	;16
	FCB	87,88,88,88,89,89,89,90,90,90,91,91,92,92,93,93	;32
	FCB	94,94,95,95,96,96,97,98,98,99,100,100,101,102,102,103	;48
	FCB	104,105,105,106,107,108,109,110,111,111,112,113,114,115,116,117	;64
	FCB	118,119,120,121,122,123,124,125,126,127,129,130,131,132,133,134	;80
	FCB	135,136,137,139,140,141,142,143,144,145,146,147,148,150,151,152	;96
	FCB	153,154,155,156,157,158,159,159,160,161,162,163,164,164,165,166	;112
	FCB	166,167,168,168,169,169,170,170,170,171,171,171,171,171,172,172	;128
	FCB	172,172,172,171,171,171,171,171,170,170,170,169,169,168,168,167	;144
	FCB	166,166,165,164,164,163,162,161,160,159,159,158,157,156,155,154	;160
	FCB	153,152,151,150,148,147,146,145,144,143,142,141,140,139,137,136	;176
	FCB	135,134,133,132,131,130,129,127,126,125,124,123,122,121,120,119	;192
	FCB	118,117,116,115,114,113,112,111,111,110,109,108,107,106,105,105	;208
	FCB	104,103,102,102,101,100,100,99,98,98,97,96,96,95,95,94	;224
	FCB	94,93,93,92,92,91,91,90,90,90,89,89,89,88,88,88	;240
	FCB	87,87,87,87,87,86,86,86,86,86,86,86,86,86,85,85	;256
	FCB	85,85,85,86,86,86,86,86,86,86,86,86,87,87,87,87	;16
	FCB	87,88,88,88,89,89,89,90,90,90,91,91,92,92,93,93	;32
	FCB	94,94,95,95,96,96,97,98,98,99,100,100,101,102,102,103	;48
	FCB	104,105,105,106,107,108,109,110,111,111,112,113,114,115,116,117	;64
	FCB	118,119,120,121,122,123,124,125,126,127,129,130,131,132,133,134	;80
	FCB	135,136,137,139,140,141,142,143,144,145,146,147,148,150,151,152	;96
	FCB	153,154,155,156,157,158,159,159,160,161,162,163,164,164,165,166	;112
	FCB	166,167,168,168,169,169,170,170,170,171,171,171,171,171,172,172	;128
	FCB	172,172,172,171,171,171,171,171,170,170,170,169,169,168,168,167	;144
	FCB	166,166,165,164,164,163,162,161,160,159,159,158,157,156,155,154	;160
	FCB	153,152,151,150,148,147,146,145,144,143,142,141,140,139,137,136	;176
	FCB	135,134,133,132,131,130,129,127,126,125,124,123,122,121,120,119	;192
	FCB	118,117,116,115,114,113,112,111,111,110,109,108,107,106,105,105	;208
	FCB	104,103,102,102,101,100,100,99,98,98,97,96,96,95,95,94	;224
	FCB	94,93,93,92,92,91,91,90,90,90,89,89,89,88,88,88	;240
	FCB	87,87,87,87,87,86,86,86,86,86,86,86,86,86,85,85	;256
	FCB	85,85,85,86,86,86,86,86,86,86,86,86,87,87,87,87	;16
	FCB	87,88,88,88,89,89,89,90,90,90,91,91,92,92,93,93	;32
	FCB	94,94,95,95,96,96,97,98,98,99,100,100,101,102,102,103	;48
	FCB	104,105,105,106,107,108,109,110,111,111,112,113,114,115,116,117	;64
	FCB	0
#MOVE
MAKESINCOS3D	LDY	#COSTBL
	LDX	#SINTBL
	RTS
ENDFUNCTION
;
;
; *******************************************************************************************************************
; * tanangle(x,y)
; *******************************************************************************************************************
FUNCTION	TANANGLE	XP,YP
REM	; tanangle(x,y) returns angle from values -4 to 4 on both axis. (use signed bytes)
REM	; returns angle to b register
DEF	XP	BYTE
DEF	YP	BYTE
XP	FCB	0
YP	FCB	0
SX	FCB	4
SY	FCB	4
JOYTAN	FCB	160,154,147,139,128,117,109,102,96	;0
	FCB	166,160,152,141,128,115,104,96,90	;1
	FCB	173,168,160,147,128,109,96,88,83	;2
	FCB	182,179,173,160,128,96,83,77,74	;3
	FCB	192,192,192,192,0,64,64,64,64	;4
	FCB	202,205,211,224,0,32,45,51,54	;5
	FCB	211,216,224,237,0,19,32,40,45	;6
	FCB	218,224,232,243,0,13,24,32,38	;7
	FCB	224,230,237,246,0,10,19,26,32	;8
TANANGLE	LDA	#4
	STA	SX
	STA	SY
	LDA	XP
	CMPA	#128
	BLS	NOTNEGX
; its negativex
	SUBA	#128
	STA	XP
	LDA	SX
	SUBA	XP
	STA	SX
	BRA	CHECKY
NOTNEGX	LDA	SX
	ADDA	XP
	STA	SX
CHECKY	LDA	YP
	CMPA	#128
	BLS	NOTNEGY
; its negativex
	SUBA	#128
	STA	YP
	LDA	SY
	SUBA	YP
	STA	SY
	BRA	CHECKD
NOTNEGY	LDA	SY
	ADDA	YP
	STA	SY
CHECKD	LDA	SX
	CMPA	#9
	BHS	EXIT1
	LDA	SY
	CMPA	#9
	BHS	EXIT1
; calc it
	LDX	#JOYTAN
	LDA	#9
	LDB	SY
	MUL
	LEAX	B,X
	LDA	SX
	LDB	A,X
	RTS
EXIT1	CLRB
	RTS	;no go out of range
ENDFUNCTION
;
;
; *******************************************************************************************************************
; * tanjoystick()
; *******************************************************************************************************************
FUNCTION	TANJOYSTICK2	
REM	; tanjoystick2() returns angle from joystick
REM	; returns angle to b register
XP	FCB	0
YP	FCB	0
SX	FCB	4
SY	FCB	4
JOYTAN	FCB	160,160,128,128,128,128,128,96,96	;0
	FCB	160,160,160,128,128,128,96,96,96	;1
	FCB	192,160,160,0,128,0,96,96,64	;2
	FCB	192,192,0,0,0,0,0,64,64	;3
	FCB	192,192,192,0,0,0,64,64,64	;4
	FCB	192,192,0,0,0,0,0,64,64	;5
	FCB	192,224,224,0,255,0,32,32,64	;6
	FCB	224,224,224,255,255,255,32,32,32	;7
	FCB	224,224,255,255,255,255,255,32,32	;8
; data 0-64
; data 0-32
; data 0-16
; data 0-8
TANJOYSTICK2	LDA	$015A
	LSRA
	LSRA
	LSRA
	STA	SY
	LDA	$015B
	LSRA
	LSRA
	LSRA
	STA	SX
CHECKD	CMPA	#9
	BHS	EXIT1
	LDA	SY
	CMPA	#9
	BHS	EXIT1
; calc it
	LDX	#JOYTAN
	LDA	#9
	LDB	SY
	MUL
	LEAX	B,X
	LDA	SX
	LDB	A,X
	RTS
EXIT1	CLRB
	RTS	;no go out of range
ENDFUNCTION
;
;
; *******************************************************************************************************************
; * tanjoystick()
; *******************************************************************************************************************
FUNCTION	TANJOYSTICK	
REM	; tanjoystick() returns angle from joystick
REM	; returns angle to b register
XP	FCB	0
YP	FCB	0
SX	FCB	0
SY	FCB	0
JOYTAN	FCB	160,159,158,156,154,153,151,149,147,145,143,141,139,136,134,131,128,125,122,120,117,115,113,111,109,107,105,103,102,100,98,97,96	;
	FCB	161,160,159,157,156,154,152,150,149,146,144,141,139,136,134,131,128,125,122,119,117,115,112,110,107,106,104,102,100,99,97,96,95	;
	FCB	163,161,160,158,157,156,153,151,149,147,145,142,139,137,134,132,128,124,122,119,117,114,111,109,107,105,102,100,99,98,96,95,93	;
	FCB	164,163,162,160,158,157,155,153,151,149,146,144,141,137,134,132,128,124,122,119,115,112,110,107,105,103,101,99,98,96,94,93,92	;
	FCB	166,165,163,162,160,158,156,154,152,150,147,144,141,139,135,132,128,124,121,117,115,112,109,106,104,102,100,98,96,94,93,91,90	;
	FCB	168,166,165,163,162,160,158,156,154,151,149,146,142,139,136,132,128,124,120,117,114,110,107,105,102,100,98,96,94,93,91,90,88	;
	FCB	169,168,167,166,164,162,160,158,156,153,150,147,144,140,136,132,128,124,119,116,112,109,106,103,100,98,96,94,92,90,89,88,87	;
	FCB	171,170,169,168,166,164,163,160,158,155,152,149,145,141,137,133,128,123,119,115,111,107,104,101,98,96,93,92,90,88,87,85,85	;
	FCB	173,172,171,170,168,166,165,163,160,158,154,151,147,143,139,134,128,122,117,113,109,105,102,98,96,93,91,90,88,86,85,84,83	;
	FCB	175,174,173,172,170,169,168,166,163,160,157,153,149,145,139,134,128,122,117,111,107,102,99,96,93,90,88,87,85,84,83,82,81	;
	FCB	178,177,175,175,173,172,170,168,166,163,160,156,152,147,141,135,128,121,115,109,104,100,96,93,90,88,85,84,83,81,81,79,78	;
	FCB	180,179,178,177,176,175,173,171,169,167,164,160,156,150,144,136,128,119,112,106,100,96,92,89,87,85,83,81,80,79,78,77,76	;
	FCB	182,182,181,180,179,178,177,175,173,171,168,165,160,154,147,139,128,117,109,102,96,91,88,85,83,81,79,78,77,76,75,74,74	;
	FCB	185,184,183,183,182,181,180,179,178,175,173,170,166,0,0,0,0,0,0,0,90,85,83,81,78,77,76,75,74,73,73,72,71	;
	FCB	187,187,186,186,185,185,184,183,182,181,179,177,173,0,0,0,0,0,0,0,83,79,77,75,74,73,72,71,71,70,70,69,69	;
	FCB	190,190,189,189,189,188,188,187,187,186,185,184,182,0,0,0,0,0,0,0,74,72,71,70,69,68,68,68,67,67,67,66,66	;
	FCB	192,192,192,192,192,192,192,192,192,192,192,192,192,0,0,0,0,0,0,0,64,64,64,64,64,64,64,64,64,64,64,64,64	;
	FCB	195,195,195,195,195,196,196,197,197,198,199,200,202,0,0,0,0,0,0,0,54,56,57,58,59,59,60,60,61,61,61,61,61	;
	FCB	197,197,198,198,199,200,200,201,202,203,205,207,211,0,0,0,0,0,0,0,45,49,51,53,54,55,56,56,57,58,58,59,59	;
	FCB	200,200,201,201,202,203,204,205,207,209,211,214,218,0,0,0,0,0,0,0,38,42,45,47,49,51,52,53,54,55,55,56,56	;
	FCB	202,202,203,204,205,206,207,209,211,213,216,219,224,230,237,246,255,10,19,26,32,37,40,43,45,47,49,50,51,51,53,54,54	;
	FCB	204,205,206,207,208,209,211,213,215,217,220,224,229,234,241,248,255,8,15,22,27,32,36,39,41,43,45,47,48,49,50,51,51	;
	FCB	207,207,209,209,211,212,214,216,218,221,224,228,232,237,243,249,255,7,13,19,24,28,32,35,38,40,42,44,45,47,47,49,49	;
	FCB	209,210,211,212,214,215,217,219,221,224,227,231,235,239,245,250,255,6,11,17,21,25,29,32,34,37,39,41,42,44,45,46,47	;
	FCB	211,212,213,214,216,218,219,221,224,226,230,233,237,241,246,251,255,5,10,15,19,23,26,30,32,34,37,38,40,42,43,44,45	;
	FCB	213,214,215,217,218,220,221,224,226,229,232,235,239,243,247,251,255,5,9,13,17,21,24,27,30,32,34,36,38,39,41,42,43	;
	FCB	215,216,217,219,220,222,224,226,229,231,234,237,241,244,248,252,255,4,8,12,15,19,22,25,27,30,32,34,36,37,39,40,41	;
	FCB	217,218,219,221,222,224,226,228,230,233,236,238,242,245,248,252,255,4,8,11,14,17,20,23,26,28,30,32,34,35,37,38,39	;
	FCB	218,219,221,222,224,226,228,230,232,234,237,240,243,246,249,253,255,3,7,10,13,16,19,22,24,26,28,30,32,34,35,37,38	;
	FCB	220,221,222,224,226,227,229,231,234,236,238,241,243,247,250,253,255,3,6,9,13,15,17,20,22,25,27,29,30,32,34,35,36	;
	FCB	221,223,224,226,227,229,231,233,235,237,239,242,245,247,250,253,255,3,6,9,11,14,17,19,21,23,25,27,29,30,32,33,34	;
	FCB	223,224,225,227,229,230,232,234,236,238,241,243,246,248,251,253,255,3,5,8,10,13,15,18,20,22,24,26,27,29,31,32,33	;
	FCB	224,225,226,228,230,231,233,235,237,239,241,243,246,248,251,253,255,3,5,8,10,13,15,17,19,21,23,25,26,28,30,31,32	;
; data 0-64
; data 0-32
; data 0-16
; data 0-8
TANJOYSTICK	LDA	$015A
	LSRA
	STA	SY
	LDA	$015B
	LSRA
	STA	SX
CHECKD	CMPA	#33
	BHS	EXIT1
	LDA	SY
	CMPA	#33
	BHS	EXIT1
; calc it
	LDX	#JOYTAN
	LDA	#33
	LDB	SY
	MUL
	LEAX	D,X
	LDA	SX
	LDB	A,X
	RTS
EXIT1	CLRB
	RTS	;no go out of range
ENDFUNCTION
;
;
; ***********************************************************************************************************************
; * rnd(x,y)
; * returns value to a register
; ***********************************************************************************************************************
FUNCTION	RND	LOWV,HIGHV
REM	; rnd(low range, high range) value is from range 0-254 and low cannot be higher then high range
REM	; Returns result to b register
DEF	LOWV	BYTE
DEF	HIGHV	BYTE
RNDR	FCB	0
LOWV	FCB	0
HIGHV	FCB	0
STEPR	FCB	0
RES	FCB	0
SUBT	FCB	0
RND	LDB	HIGHV
	INCB
	STB	HIGHV
	SUBB	LOWV
	STB	RNDR
	DEC	HIGHV
;rnd
RND15	LDB	$113
	ADDB	STEPR
	STB	RES
;now i should have 0-15 in the bit bucket
;wrap it
;	LSLB
	STB	STEPR
RNDL15	CMPB	RNDR
	BLS	RNDR15
	SUBB	RNDR
	BRA	RNDL15
RNDR15	ADDB	LOWV
RNX15	CMPB	HIGHV
	BLS	RNY15
	INC	STEPR
	LDB	LOWV
RNY15	STB	RES
	RTS
ENDFUNCTION
;
;**************************************************************************************
;* inkey$
;**************************************************************************************
FUNCTION	INKEY$	
REM	;inkey$()  returns keypress value into A register...  =0 if nothing pressed
REM	;Does not push to stack and assume it uses A,B,X,Y,U but you can test to confirm.
INKEY$	JSR	[$A000]
	RTS
ENDFUNCTION
;
; *************************************************************************************
; * str$(word address,retstring adr)
; *************************************************************************************
; convert number to string
; put numbers in for string add
; 
FUNCTION	STR$	NUMSTA,X
REM	;str$(word,[return string])  word is a value or 0-65535 and needs a return address to populate string. 6 BYTES REQUIRED
REM	;Does not push to stack and uses A,B,X,Y,U registers
DEF	X	STRING	;populate x register with string at x
DEF	NUMSTA	WORD	;save 
NUMTMP	FCB	0	;temporary a storage
NUMSTA	FCB	0	;storage of number
NUMSTB	FCB	0
NUMADR1	FCB	0,0
NUMST1	FCN	"00000"	;string 1
NUMST2	FCN	"00000"	;string 2
#NOMOVE
NUMB16	FCN	"32768"
NUMB15	FCN	"16384"
NUMB14	FCN	"08192"
NUMB13	FCN	"04096"
NUMB12	FCN	"02048"
NUMB11	FCN	"01024"
NUMB10	FCN	"00512"
NUMB09	FCN	"00256"
NUMB08	FCN	"00128"
NUMB07	FCN	"00064"
NUMB06	FCN	"00032"
NUMB05	FCN	"00016"
NUMB04	FCN	"00008"
NUMB03	FCN	"00004"
NUMB02	FCN	"00002"
NUMB01	FCN	"00001"
NUMB00	FCN	"00000"
#MOVE
STR$	STX	NUMADR1	;may need to fix
	STD	NUMSTA	;fixed i hope
	CMPD	#0
	LBEQ	WRIST0
	LDY	#NUMST2
	LDD	#$3030
	STD	,Y
	STD	2,Y
	STD	3,Y	;cleared storage with 0*S
	LDX	#NUMSTA	;first byte
	LDA	,X
	BEQ	WRIDR7	;one byte only
	BITA	#128
	BNE	STRA16
WRIDR0	BITA	#64
	BNE	STRA15
WRIDR1	BITA	#32
	BNE	STRA14	
WRIDR2	BITA	#16
	BNE	STRA13	
WRIDR3	BITA	#8
	BNE	STRA12	
WRIDR4	BITA	#4
	BNE	STRA11
WRIDR5	BITA	#2
	BNE	STRA10	
WRIDR6	BITA	#1
	BNE	STRA09
WRIDR7	LDX	#NUMSTB
	LDA	,X	;test second bit
	BITA	#128
	BNE	STRA08
WRIDR8	BITA	#64
	BNE	STRA07
WRIDR9	BITA	#32
	BNE	STRA06	
WRID10	BITA	#16
	BNE	STRA05	
WRID11	BITA	#8
	BNE	STRA04	
WRID12	BITA	#4
	BNE	STRA03
WRID13	BITA	#2
	BNE	STRA02	
WRID14	BITA	#1
	BNE	STRA01
	LBRA	STRFIX1	; done the string is now stored in numst2
STRA16	LDU	#NUMB16
	JSR	STRINGA
	BRA	WRIDR0
STRA15	LDU	#NUMB15
	JSR	STRINGA
	BRA	WRIDR1
STRA14	LDU	#NUMB14
	JSR	STRINGA
	BRA	WRIDR2
STRA13	LDU	#NUMB13
	JSR	STRINGA
	BRA	WRIDR3
STRA12	LDU	#NUMB12
	JSR	STRINGA
	BRA	WRIDR4
STRA11	LDU	#NUMB11
	JSR	STRINGA
	BRA	WRIDR5
STRA10	LDU	#NUMB10
	JSR	STRINGA
	BRA	WRIDR6
STRA09	LDU	#NUMB09
	JSR	STRINGA
	BRA	WRIDR7
STRA08	LDU	#NUMB08
	JSR	STRINGA
	BRA	WRIDR8
STRA07	LDU	#NUMB07
	JSR	STRINGA
	BRA	WRIDR9
STRA06	LDU	#NUMB06
	JSR	STRINGA
	BRA	WRID10
STRA05	LDU	#NUMB05
	JSR	STRINGA
	BRA	WRID11
STRA04	LDU	#NUMB04
	JSR	STRINGA
	BRA	WRID12
STRA03	LDU	#NUMB03
	JSR	STRINGA
	BRA	WRID13
STRA02	LDU	#NUMB02
	JSR	STRINGA
	BRA	WRID14
STRA01	LDU	#NUMB01
	JSR	STRINGA
STRFIX1	LDX	NUMADR1	;load value thats there
	LDY	#NUMST2
	LDB	#6
STRFLP0	DECB
	CMPB	#1
	BLS	STRFLP2
	LDA	,Y+
	CMPA	#48
	BEQ	STRFLP3	;get rid of extra 0*S and make spaces
	BRA	STRFLP1
STRFLP2	LDA	,Y+
STRFLP1	STA	,X+
	DECB
	CMPB	#0
	BHI	STRFLP2
	CLRA
	STA	,X
	RTS	;done sub
STRFLP3	LDA	#32	;this can be modified to kill extra space
	STA	,X+
	BRA	STRFLP0
WRIST0	LDX	NUMADR1	;load value within
	LDA	#32
	STA	,X
	STA	1,X
	STA	2,X
	STA	3,X
	LDA	#48
	STA	4,X
	CLRA
	STA	5,X
	RTS	;done 0 fix
; add two strings together 1 into 2
STRINGA	STA	NUMTMP	;store temp value and load back after done
; need to copy u to numst1
	LDY	#NUMST1
	LDB	#5
STRLP0	DECB
	LDA	B,U
	STA	B,Y
	CMPB	#0
	BHI	STRLP0
;	ok its copied so i cant fuckup the fixed string
	LDU	#NUMST1
	LDY	#NUMST2	;load string 2 index
	LDB	#5	;lets add the two strings together 5 chrs long and store answer in string 2
;start adding together
STRLP1	DECB	;main loop for math
	LDA	B,U	;set start x reference number to add to result
	ADDA	B,Y	;add u to y
	SUBA	#48	;subtract 48 ascii "0" to bring ascii back into number range
	STA	B,Y	;store answer
; //CHECK FOR CARRY
	CMPA	#58	;if the ascii=58 then the number is out of range.....this produces a carry
	BHS	STRS0
	BRA	STRS1
STRS0	SUBA	#10	;subtract 10 from the ascii code to bring it back in range
	STA	B,Y	;store remainder value
	SUBA	#48	;need to subtract 48 ascii to bring this number back in range before saving it
	CMPB	#0	;if its already 0....cant carry
	BEQ	STRS1
	DECB	;lets go to next place for the carry
	LDA	#1	;the carry
	ADDA	B,U	;add it
	STA	B,U	;store it
	INCB	;put the index back because it will decrease in the loop
STRS1	CMPB	#0
	BHI	STRLP1	
	LDA	NUMTMP
	RTS	;return from subroutine with a register restored
ENDFUNCTION
;
; ***************************************************************************************************************
; *   updatejoystick()
; ***************************************************************************************************************
FUNCTION	UPDATEJOYSTICK	
REM	; updatejoystick() this updates left joystick port and saves data at $015a $015b y,x bt1=$015c bt2=$015d
REM	; Does not push to stack
UPDATEJOYSTICK	LDA	$FF23
	ORA	#8	;=1
	EORA	#8	;=0      shutting sound bit off 
	STA	$FF23
	LDA	#$3D
	STA	$FF03
	LDA	#$3C
	STA	$FF01
	CLRB
JOYLEFT	STB	$FF20	;testing comparitor
	LDA	$FF00	;load actual voltage value
	BPL	JOYLF
	ADDB	#$04
	CMPB	#$FC
	BEQ	JOYLF
	BRA	JOYLEFT
JOYLF	LSRB
	LSRB
	STB	$015A
	LDA	#$34
	STA	$FF01
	CLRB
JOYRIGHT	STB	$FF20	;testing comparitor
	LDA	$FF00	;load actual voltage value
	BPL	JOYRF
	ADDB	#$04
	CMPB	#$FC
	BEQ	JOYRF
	BRA	JOYRIGHT
JOYRF	LSRB
	LSRB
	STB	$015B
; lets get joystick fire buttons and store at $015c, $015d
	LDD	$FFFE
	ADDD	$FFFF
	CMPA	#167
	BEQ	SETCC3
	CLRA
	BRA	JOYBT
SETCC3	LDA	#1	
JOYBT	CMPA	#1
	BEQ	JOYC3
	LDA	$FF00
	ANDA	#2
	STA	$015C
	LDA	$FF00
	ANDA	#1
	STA	$015D
	BRA	SETTV
JOYC3	LDA	$0152
	ANDA	#2
	STA	$015C
	LDA	$0152
	ANDA	#8
	STA	$015D
SETTV	LDA	$FF23	;turn sound back on for gmc or psg
	ORA	#8
	STA	$FF23
	LDA	$FF03
	ORA	#8
	STA	$FF03
	LDA	$FF01
	ORA	#8
	EORA	#8
	STA	$FF01
	RTS	;return
ENDFUNCTION
;
;
; ***************************************************************************************************************
; *   updatejoysticklr()	left and right only no sound problems
; ***************************************************************************************************************
FUNCTION	UPDATEJOYSTICKLR	
REM	; updatejoystick() this updates left joystick port and saves data at $015b x only  bt1=$015c bt2=$015d
REM	; Does not push to stack
UPDATEJOYSTICKLR	LDA	#$3D
	STA	$FF03
	LDA	#$34
	STA	$FF01
	CLRB
JYL1	STB	$FF20
	LDA	$FF00
	BPL	JYC1
	ADDB	#$04
	CMPB	#$FC
	BEQ	JYC1
	BRA	JYL1
JYC1	LSRB
	LSRB
	STB	$015B
	LDD	$FFFE
	ADDD	$FFFF
	CMPA	#167
	BEQ	SETCC3
	CLRA
	BRA	JOYBT
SETCC3	LDA	#1	
JOYBT	CMPA	#1
	BEQ	JOYC3
	LDA	$FF00
	ANDA	#2
	STA	$015C
	LDA	$FF00
	ANDA	#1
	STA	$015D
	BRA	SETTV
JOYC3	LDA	$0152
	ANDA	#2
	STA	$015C
	LDA	$0152
	ANDA	#8
	STA	$015D
SETTV	RTS	;dont need to play with tv
	LDA	$FF23	;turn sound back on for gmc or psg
	ORA	#8
	STA	$FF23
	LDA	$FF03
	ORA	#8
	STA	$FF03
	LDA	$FF01
	ORA	#8
	EORA	#8
	STA	$FF01
	RTS	;return
ENDFUNCTION
